const https = require('https');
const SQLHelper = require('./SQLHelper')

//雪花算法生成id
const snowflake = require('./snowflake')

const { formatTime } = require('./util')

const multer = require('multer')
const storage = multer.diskStorage({
    destination: './uploads',
    filename: function(req, file, cb){
        //获取图片类型
        let fileType = file.originalname.split('.')
        fileType = fileType[fileType.length - 1]
        cb(null, snowflake() + '.' + fileType)
    }
})
const upload = multer({storage: storage})

module.exports = function (app) {
    //登录拦截中间件
    function loginRouter(req, res, next) {
        if (req.method.toUpperCase() == 'OPTIONS') {
            next()
            return;
        }
        let token = req.headers.token
        if (token) {
            SQLHelper(`select * from session where id = ${token} and state = 1`).then(ret => {
                if (ret.length) {
                    let session = ret[0]
                    //2H
                    if (new Date().getTime() - session.createTime < 2 * 60 * 60 * 1000) {
                        req.session = {
                            userId: session.userId,
                            userName: session.userName
                        }
                        next()
                    } else {
                        res.status(400).send({ errorMsg: '登录超时' })
                    }
                } else {
                    res.status(400).send({ errorMsg: '当前用户未登录' })
                }
            })
        } else {
            res.status(400).send({ errorMsg: '缺少token，请先进行登录' })
        }
    }
    //让初登陆以为的所有小程序接口都先验证登陆
    app.use('/admin', loginRouter)

    //管理端登录
    app.post('/login', (req, res) => {
        let userName = req.body.userName
        let passWord = req.body.passWord
        if (userName && passWord) {
            SQLHelper(`
                select * from user where userName = '${userName}'
            `).then(users => {//此时user是一个列表，所以 users
                if (users.length) {//存在时为正常登陆
                    let user = users[0]
                    if (passWord == user.passWord) {//正常登陆
                        let token = snowflake()
                        //缓存token到session表
                        SQLHelper(`
                        INSERT INTO session(id,userId,userName,inTime,createTime,platform) 
                        VALUES(${token},'${user._id}','${user.nickName}','${formatTime(new Date())}','${new Date().getTime()}','wx')
                        `).then(ret => {
                            res.send({
                                token,
                                nickName: user.nickName,
                                avatarUrl: user.avatarUrl,
                                _id: user._id
                            })
                        })
                    } else {//非正常登陆，结果返回给前端
                        res.send({ errorMsg: '密码错误' })
                    }
                } else {
                    res.send({ errorMsg: '当前用户不存在' })
                }
            })
        } else {
            res.send({ errorMsg: '请输入用户名和密码' })
        }
    })

    //退出登录
    app.get('/admin/logout', (req, res) => {
        SQLHelper(`
            update session set outTime = '${formatTime(new Date())}', state = 0 where id = '${req.headers.token}'
        `).then(ret => {
            res.send({ msg: '退出登录成功' })
        })
    })

    //修改密码
    app.post('/admin/changePassWord', (req, res) => {
        let userId = req.session.userId
        let passWord = req.body.passWord
        let newPassWord = req.body.newPassWord
        if (passWord && newPassWord) {
            //查询用户
            SQLHelper(`select passWord from user where _id = ${userId}`).then(users => {
                let user = users[0]
                //比对原密码
                if (user.passWord == passWord) {
                    //修改密码
                    SQLHelper(`update user set passWord = '${newPassWord}' where _id = ${userId}`).then(ret => {
                        res.send({ msg: '修改密码成功' })
                    })
                } else {
                    res.send({ errorMsg: '原密码错误' })
                }
            })
        } else {
            res.send({ errorMsg: '原密码和新密码不能为空' })
        }
    })

    //分页获取首页项目列表
    //pageSize 每页多少条数据 默认10
    //pageNum 当前页 默认1
    //type 类型 非必填 banner-轮播图(默认),categor-分类,recommend-为你推荐
    app.get('/admin/index', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let title = req.query.title
        let type = req.query.type
        let whereSql = 'from index_region where status = 1 and state = 1'
        //按类型搜索
        if (type) whereSql += ` and type = '${type}'`
        //按标题关键字搜索
        if (title) whereSql += ` and title like "%${title}%"`
        SQLHelper(`
            select count(*) as total ${whereSql};
            select * ${whereSql} 
            limit ${pageSize} offset ${offset}
        `).then(ret => {
            res.send({
                total: ret[0][0].total,
                rows: ret[1]
            })
        })
    })

    //新增首页项目
    //img 图片地址 必填
    //url 跳转地址 非必填
    //title 标题 轮播图不填,其他必填
    //status 是否启用 非必填 1-启用 0-停用
    //type 类型 非必填 banner-轮播图(默认),categor-分类,recommend-为你推荐
    app.post('/admin/index', (req, res) => {
        let img = req.body.img, url = req.body.url, status = req.body.status
        let type = req.body.type || 'banner', title = req.body.title
        if (type != 'banner' && !title) {
            res.send({ errorMsg: '标题不能为空' })
            return
        }
        if (status != 1) status = 1//默认启用
        //if(status) status = 1
        if (img) {
            SQLHelper(`
                INSERT INTO index_region(title,img,url,status,state,createTime,unitId,type) 
                VALUES('${title}','${img}','${url}','${status}',1,${new Date().getTime()},'juzao','${type}')
            `).then(ret => {
                res.send(ret.insertId ? { _id: ret.insertId } : { errorMsg: '新增数据失败' })
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

    //修改首页项目
    //indexId 主码_id 必填
    app.put('/admin/index', (req, res) => {
        if (req.body.indexId) {
            //需要修改的项
            let updateTime = new Date().getTime()
            let updateKey = ['img', 'url', 'title', 'status']
            let updateValues = [`updateTime=${updateTime}`]
            for (let i = 0; i < updateKey.length; i++) {
                let key = updateKey[i],value = req.body[key]
                if (value !== undefined) updateValues.push(`${key}='${value}'`)//判断哪些项需要修改
            }
            SQLHelper(`UPDATE index_region set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
                res.send(ret)
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

    //删除 逻辑删除首页项目
    //indexId 主码_id 必填 
    app.delete('/admin/index', (req, res) => {
        let indexId = req.query.indexId
        if (indexId) {
            SQLHelper(`
                UPDATE index_region 
                set state = 0 
                WHERE _id = ${indexId}
                `).then(ret => {
                res.send(ret)
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

    //文件上传
    app.post('/upload', upload.single('file'), (req, res) => {
        res.send(req.file)
    })
    }